package com.example.oracle.pojo.system;
import com.alibaba.fastjson.JSON;
import lombok.Data;
import java.util.HashMap;

/**
 * @author Siaze
 * @date 2021/11/9
 */
@Data
public class ResponseMap {
    /**
     * 返回代码
     */
    private int code;
    /**
     * 返回提示信息
     */
    private String msg;

    /**
     * 通过code构造
     * @param code code
     */
    public ResponseMap(int code) {
        this.code = code;
        this.data = new HashMap<>();
    }

    /**
     * 通过code和msg构造
     * @param code code
     * @param msg msg
     */
    public ResponseMap(int code, String msg) {
        this.code = code;
        this.msg = msg;
        this.data = new HashMap<>();
    }

    /**
     * 通过code，msg，data构造
     * @param code code
     * @param msg mag
     * @param data data
     */
    public ResponseMap(int code, String msg, HashMap<String, Object> data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
        this.data = new HashMap<>();
    }

    /**
     * 无参构造初始化HashMap
     */
    public ResponseMap() {
        this.data = new HashMap<>();
    }

    /**
     * 静态方法构造
     * @param webCode WebCode
     * @return 构造的对象
     */
    public static ResponseMap create(WebCode webCode){
        return new ResponseMap(webCode);
    }

    /**
     * 通过WebCode构造
     * @param webCode 构造参数
     */
    public ResponseMap(WebCode webCode) {
        this.code = webCode.getCode();
        this.msg = webCode.getMsg();
        this.data = new HashMap<>();
    }

    /**
     * 返回数据
     */
    private HashMap<String, Object> data;


    /**
     * 在data存放数据
     * @param k map的key
     * @param v map的value
     */
    public void putValue(String k, Object v) {
        this.data.put(k, v);
    }

    /**
     * 从data通过key获取数据
     * @param k key
     * @return 获取到的返回值
     */
    public Object getValue(String k) {
        return this.data.get(k);
    }

    /**
     * 重写toString方法，使其JSON格式化
     * @return JSON格式的字符串
     */
    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }
}
